package com.wn.demo02;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;

/**
 * @author yellow Docter
 * @date 2022 -07-07
 * @desc
 *  定义一个通知 监控所有的方法的执行的效率
 *
 *  01 定义一个通知   环绕通知
 *
 *  02 通知里面的业务逻辑
 *       目标方法执行前 记录一个时间
 *       目标方法执行后 记录一个时间
 *       超过阈值,警告
 *
 *  03  aop的配置
 */
public class DataAdvice {

    /**
     * 环绕通知
     * @param proceedingJoinPoint
     * @return
     */
    public Object around(ProceedingJoinPoint proceedingJoinPoint){

        long start = System.currentTimeMillis();

        //签名  方法的名称
        Signature signature = proceedingJoinPoint.getSignature();
        System.out.println(signature.getName());


        Object proceed = null;
        try {
            proceed = proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        long end= System.currentTimeMillis();

        long time = end - start;

        if (time > 2000){
            System.out.println("监控系统报警,"  + signature.getName() + ",超时:" + time);
        }
        return proceed;

    }

}
